/* 
> 动机：
    1. 一旦我发现对某个数据的操作不仅仅限于打印时，我就会为它创建一个新类。

> 做法：
    1. 如果变量尚未被封装起来，先使用封装变量封装它；
    2. 为这个数据值创建一个简单的类，类的构造器应该保存这个数据值，并为她提供一个取值函数；
    3. 执行静态检查；
    4. 修改第一步得到的设置函数，令其创建一个新类的对象并将其存入字段，如果有必要的话，同时修改字段的类型声明；
    5. 修改取值函数，令其调用新类的取值函数，并返回结果；
    6. 测试；
    7. 考虑对第一步得到的访问函数使用【函数改名】，以便更好反映其用途；
    8. 考虑应用【将引用对象改为值对象】或【将值对象改为引用对象】，明确指出新对象的橘色是值对象还是引用对象。
*/
 class Order{
    constructor(data){
        this.priority = data.priority;
    }
 }
// 客户端
 highPriorityCount = orders.filter(o => "high" === o.priority 
                    || "rush" === o.priority).length;

/****************************************************** */
class Order{
    constructor(data){
        this._priority = data.priority;
    }

    getPriority(){
        return this._priority;
    }

    getPriorityString(){
        return this._priority.toString();
    }

    setPriority(aString){
        this._priority = new Priority(aString);
    }
}

class Priority{
    constructor(value){
        if(value instanceof Priority){
            return value;
        }
        this._value = value;
    }
    toString(){
        return this._value;
    }
}

highPriorityCount = orders.filter(o => "high" === o.getPriorityString() 
                    || "rush" === o.getPriorityString()).length;